package com.zx.service.category.impl;

import com.zx.config.exception.BaseBusinessException;
import com.zx.dao.category.CategoryMapper;
import com.zx.dto.response.category.CategoryDto;
import com.zx.enums.CategoryEnums;
import com.zx.service.category.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author sunkai
 * @date 2022/7/28 0028 18:10
 * @mood zhou xun
 */
@Service
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    private static List<CategoryDto> CATEGORYDTOS = new ArrayList<>();

    public List<CategoryDto> queryType() {
        if (!CATEGORYDTOS.isEmpty()) {
            return CATEGORYDTOS;
        }
        Map<Integer, CategoryDto> categoryDtoMap = new HashMap();
        List<CategoryDto> categoryDtos = categoryMapper.queryType();
        if (categoryDtos==null){
            return new ArrayList<>();
        }
        for (CategoryDto dto : categoryDtos) {
            if (CategoryEnums.CATEGORY_LEVEL_ONE_ENUMS.getRank().equals(dto.getTypeLevel())) {
                categoryDtoMap.put(dto.getId(), dto);
            }
        }
        for (CategoryDto dto : categoryDtos) {
            if ( CategoryEnums.CATEGORY_LEVEL_TWO_ENUMS.getRank().equals(dto.getTypeLevel())) {
                CategoryDto categoryDto = categoryDtoMap.get(dto.getParentId());
                if (CollectionUtils.isEmpty(categoryDto.getCategoryDtoList())) {
                    categoryDto.setCategoryDtoList(new ArrayList<>());
                }
                categoryDto.getCategoryDtoList().add(dto);
            }
        }
        CATEGORYDTOS.addAll(categoryDtoMap.values().stream().collect(Collectors.toList()));
        return CATEGORYDTOS;
    }
}
